package com.itheima.reggie.common;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.itheima.reggie.entity.Employee;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * @author ：石破天
 * @date ：Created in 2022年11月19日
 * @description ：
 *   我们来实现接口中的 添加和更新的策略
 * @version: 1.0
 */
@Slf4j
@Component // 组件中的方法交给spring运作
public class MyMetaObjectHander implements MetaObjectHandler {
    /**
     * insertFill
     *    添加的时候 你填充啥?
     *     增加有4个字段
     * @param metaObject  元数据对象作用
     *                    作用可以
     *             给指定字段 填充 指定的值
     *
     */
    @Override
    public void insertFill(MetaObject metaObject) {
      log.info("进行增加的自动填充了哦....");
//        metaObject.setValue(字段名,自动填充的值);
        // 自动填充的时间
        metaObject.setValue("createTime", LocalDateTime.now());
        metaObject.setValue("updateTime",LocalDateTime.now());
        log.info("当处理添加填充时候的线程id:"+Thread.currentThread().getId());

        // 从当前线程中的 thread
//        ThreadLocal<Long> threadLocal = BaseContext.instance();
//        Long empId = threadLocal.get();
        Long empId = BaseContext.getCurrentId();
        // 自动填充的 是 登录用户id
        // 暂时先不取
        metaObject.setValue("createUser",empId);
        metaObject.setValue("updateUser",empId);
    }

   /*
      updateFill
         更新的时候  你填充啥
         更新两个字段
    */
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("进行更新的自动填充了哦....");
        log.info("当处理更新填充时候的线程id:"+Thread.currentThread().getId());
        // 自动填充的时间
        metaObject.setValue("updateTime",LocalDateTime.now());
        // 自动填充的 是 登录用户id

        // 从当前线程中的 thread
//        ThreadLocal<Long> threadLocal = BaseContext.instance();
//        Long empId = threadLocal.get();

        Long empId = BaseContext.getCurrentId();
        metaObject.setValue("updateUser",empId);
    }
}
